import axios from 'axios';

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:3001/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器 - 添加token到请求头
api.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器 - 处理常见错误
api.interceptors.response.use(
  (response) => {
    return response.data;
  },
  (error) => {
    // 处理错误响应
    if (error.response) {
      // 如果token失效，重定向到登录页
      if (error.response.status === 401) {
        localStorage.removeItem('token');
        localStorage.removeItem('user');
        window.location.href = '/login';
      }
      
      // 返回错误信息，但不在控制台显示为异常
      return Promise.reject(error.response.data || { message: `请求失败，状态码: ${error.response.status}` });
    } else if (error.request) {
      // 请求已发送但未收到响应
      return Promise.reject({ message: '服务器无响应，请稍后再试' });
    } else {
      // 请求设置时出错
      return Promise.reject({ message: '请求错误，请稍后再试' });
    }
  }
);

// 认证相关API
export const authAPI = {
  // 用户注册
  register: (userData) => {
    return api.post('/auth/register', userData);
  },
  
  // 用户登录
  login: (credentials) => {
    return api.post('/auth/login', credentials);
  },
  
  // 验证token
  verifyToken: () => {
    return api.get('/auth/verify-token');
  },
  
  // 更新用户名
  updateUsername: (username) => {
    return api.put('/auth/username', { username });
  },
  
  // 修改密码
  changePassword: (passwordData) => {
    return api.put('/auth/password', passwordData)
      .catch(error => {
        // 特殊处理密码相关错误
        if (error.message === '当前密码不正确') {
          return Promise.reject({ 
            isExpectedError: true, // 添加标志表示这是预期中的错误
            message: error.message 
          });
        }
        return Promise.reject(error);
      });
  }
};

// 智能体相关API
export const agentAPI = {
  // 获取用户所有自定义智能体
  getUserAgents: () => {
    return api.get('/agents');
  },
  
  // 创建新的自定义智能体
  createAgent: (agentData) => {
    return api.post('/agents', agentData);
  },
  
  // 更新智能体
  updateAgent: (id, agentData) => {
    return api.put(`/agents/${id}`, agentData);
  },
  
  // 删除智能体
  deleteAgent: (id) => {
    return api.delete(`/agents/${id}`);
  },
  
  // 获取收藏的智能体ID列表
  getFavorites: () => {
    return api.get('/agents/favorites');
  },
  
  // 添加智能体到收藏
  addToFavorites: (agentId) => {
    return api.post('/agents/favorites', { agentId });
  },
  
  // 从收藏中移除智能体
  removeFromFavorites: (agentId) => {
    return api.delete(`/agents/favorites/${agentId}`);
  },
  
  // 切换智能体收藏状态
  toggleFavorite: (params) => {
    console.log('toggleFavorite 接收到的参数:', params);
    
    // 处理不同的参数格式
    let agentId, isFavorite;
    
    if (typeof params === 'object') {
      // 如果传入的是对象，尝试从对象中获取参数
      agentId = params.agentId || params.id;
      isFavorite = params.isFavorite;
      
      // 如果参数中没有id，尝试从agent对象中获取
      if (!agentId && params.agent) {
        agentId = params.agent.id;
        isFavorite = params.agent.isFavorite;
      }
    } else {
      // 如果传入的直接是ID字符串
      agentId = params;
      isFavorite = true; // 默认为添加收藏
    }
    
    console.log('处理后的参数:', { agentId, isFavorite });
    
    if (!agentId) {
      console.error('无法提取agentId，原始参数:', params);
      return Promise.reject({ message: '无效的智能体ID' });
    }
    
    // 发送请求
    return api.post('/agents/favorites/toggle', { 
      agentId: agentId,
      isFavorite: isFavorite
    });
  }
};

export default api; 